home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Print;
- {Print is in the Public Domain. Print is an OSS Pascal Source Code Printing
- Program by Barry Larson - Rochester, MN. Print has the ability to print
- the include files coded into OSS Pascal source files and can be customized
- with easy constant changes. }
- CONST
- {$I Gemconst.pas}
- c_default_path = 'A:\*.PAS';
- c_lines_per_page = 60;
- c_ask_for_source = TRUE;
- c_headers_are_printed = TRUE;
- c_include_files_are_printed = TRUE;
- c_oss_files_are_printed = TRUE;
- c_final_form_feed = TRUE;
- c_offer_line_numbers = TRUE;
- TYPE
- {$I Gemtype.pas}
- VAR
- lert,
- working,
- defpath,
- inpath,
- linestr,
- test: STR255;
- pagecount,
- linecount,
- counter,
- choice: INTEGER;
- l_numbers: BOOLEAN;
- {$I Gemsubs.pas}
- PROCEDURE IO_Check(b: BOOLEAN);
- EXTERNAL;
- FUNCTION IO_Result: INTEGER;
- EXTERNAL;
- PROCEDURE Abort_Check;
- BEGIN
- IF KEYPRESS
- THEN
- BEGIN
- choice := Do_Alert(
- '[3][ | |Continue or Abort Printing ][ Continue | Abort ]',1);
- IF (choice = 2)
- THEN
- HALT;
- END;
- END{Abort_Check};
- PROCEDURE Convert(number: INTEGER; Var tempstr: STR255);
- BEGIN
- tempstr := '';
- WHILE (number > 0) DO
- BEGIN
- tempstr :=
- CONCAT(CHR((number - ((number DIV 10) * 10)) + ORD('0')), tempstr);
- number := (number DIV 10);
- END;
- IF ( (tempstr = '') OR (tempstr = ' ') )
- THEN
- tempstr := '0';
- END{Convert};
- PROCEDURE Header;
- Var
- temp1,
- temp2: STR255;
- counter: INTEGER;
- BEGIN
- IF c_headers_are_printed
- THEN
- BEGIN
- Abort_Check;
- temp1 := inpath;
- Convert(pagecount,temp2);
- For counter := 74-Length(temp2) downto Length(temp1) do
- temp1 := Concat(temp1,' ');
- Insert('Page ',temp1,74-Length(temp2));
- Insert(temp2,temp1,79-Length(temp2));
- WRITELN(temp1);
- WRITELN;
- END;
- END{Header};
- PROCEDURE Parse(VAR tmp: STR255);
- VAR
- p1,
- p2,
- p3,
- lp: INTEGER;
- BEGIN
- Abort_Check;
- p1 := POS('$I', tmp);
- p2 := POS('$i', tmp);
- IF p2 > p1
- THEN
- p1 := p2;
- p1 := p1 + 2;
- p2 := 0;
- p3 := 0;
- FOR lp := p1 to LENGTH(tmp) DO
- IF (p2 = 0) AND (tmp[lp] <> ' ')
- THEN
- p2 := lp
- ELSE
- IF ( (p2 <> 0) AND
- ( (tmp[lp] = ' ') OR (tmp[lp] = '}') OR (tmp[lp] = '*') ) AND
- (p3 = 0) )
- THEN
- p3 := lp;
- tmp := COPY(tmp, p2, (p3 - p2));
- IF ( POS('.', tmp) = 0 )
- THEN
- tmp := CONCAT(tmp, '.PAS');
- IF (tmp[2] <> ':')
- THEN
- tmp := CONCAT('A:\', tmp);
- FOR lp := 1 to LENGTH(tmp) DO
- BEGIN
- IF tmp[lp] IN ['a'..'z']
- THEN
- BEGIN
- p1 := ORD(tmp[lp]) - ORD('a') + ORD('A');
- tmp[lp] := CHR(p1);
- END;
- END;
- IF (tmp[1] <> 'A')
- THEN
- tmp[1] := 'A';
- END{Parse};
-
- PROCEDURE Do_Reinsert;
- BEGIN
- choice := Do_Alert('[3][ | |Re-Insert Former Disk][ OK | Cancel ]',1);
- IF choice = 2
- THEN
- HALT;
- END{Do_Reinsert};
-
-
- PROCEDURE List(f_name: STR255);
- LABEL
- 1;
- VAR
- choice: INTEGER;
- f_var,
- f_var2: TEXT;
- box_text: STR255;
- re_do_disk: BOOLEAN;
- BEGIN
- Abort_Check;
- re_do_disk := FALSE;
- choice := 0;
- IO_Check(FALSE);
- Reset(f_var, f_name);
- IF (IO_Result <> 0)
- THEN
- REPEAT
- re_do_disk := TRUE;
- box_text := '[1][ |File Not Found. |Please Insert ';
- box_text := CONCAT(box_text, 'Source Disk |for File: ');
- box_text := CONCAT(box_text,f_name, ' ][ OK | Ignore | Abort ]');
- choice := Do_Alert(box_text, 1);
- IF (choice = 3)
- THEN
- HALT
- ELSE
- IF (choice = 2)
- THEN
- BEGIN
- re_do_disk := FALSE;
- GOTO 1;
- END;
- Reset(f_var, f_name);
- UNTIL (IO_Result = 0);
- IO_Check(TRUE);
- READLN(f_var, working);
- While not EOF(f_var) do
- BEGIN
- Abort_Check;
- Convert(linecount,linestr);
- IF (Length(working) <= 74) and (l_numbers)
- THEN
- BEGIN
- While Length(linestr) < 6 do
- linestr := Concat(linestr,' ');
- working := Concat(linestr,working);
- END;
- WRITELN(working);
- linecount := linecount+1;
- counter := counter+1;
- IF ( counter > c_lines_per_page )
- THEN
- BEGIN
- pagecount := pagecount+1;
- PAGE;
- Header;
- counter := 1;
- END;
-
- IF ( (POS('$I', working) + POS('$i', working)) > 0 ) AND
- (c_include_files_are_printed)
- THEN
- BEGIN
- Parse(working);
- IF (POS(',', working) = 0)
- THEN
- BEGIN
- IF ((working <> 'A:\GEMCONST.PAS') AND
- (working <> 'A:\GEMSUBS.PAS') AND
- (working <> 'A:\GEMTYPE.PAS') ) OR
- (c_oss_files_are_printed)
- THEN
- BEGIN
- box_text := CONCAT(
- '[2][ |Print include file:|', working);
- box_text := CONCAT(box_text,'][ Yes | No ]');
- IF ( Do_Alert(box_text, 1) = 1 )
- THEN
- List(working);
- END;
- END;
- END;
- READLN(f_var, working);
- END;
- CLOSE(f_var);
- 1:
- IF re_do_disk
- THEN
- Do_Reinsert;
- END{List};
-
- BEGIN {MAIN}
- IF (Init_Gem < 0)
- THEN
- HALT;
- pagecount := 1;
- linecount := 1;
- IF c_ask_for_source
- THEN
- BEGIN
- lert := '[3][ "Print" by Barry Larson. | Portions (c) by ';
- lert := CONCAT(lert,'OSS, Inc. | ');
- lert := CONCAT(lert,'Insert Pascal Source Disk][ OK | Cancel ]');
- choice := Do_Alert(lert, 1);
- IF (choice <> 1)
- THEN
- HALT;
- END;
- defpath := c_default_path;
- IF (Get_In_File(defpath,inpath))
- THEN
- BEGIN
- test := Copy(inpath,Length(inpath),1);
- IF test = '\'
- THEN
- HALT;
- choice := 1;
- IF c_offer_line_numbers
- THEN
- choice := Do_Alert
- ('[2][ | |Print with line numbers][ No | Yes | Cancel ]',1);
- IF choice = 2
- THEN
- l_numbers := TRUE;
- IF choice = 3
- THEN
- HALT;
- Rewrite(Output,'PRN:');
- Header;
- counter := 1;
- List(inpath);
- IF c_final_form_feed
- THEN
- PAGE;
- PAGE;
- END;
- Exit_Gem;
- END {MAIN}.
-